class Animal(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def sleep(self):
        print(self.name + ' is sleeping')


class Dog(Animal):  # 继承的语法——class <class_name>(<father_name>):
    def bark(self):
        print(self.name + ' is barking')


class Student(Animal):
    def study(self):
        print(self.name + ' is studying')


d1 = Dog('dog1', 4)  # 先后调用了__new__, __init__方法
# 当子类调用的方法或属性在子类中没有定义时，会一层一层的向父类寻找，表现为：
d1.sleep()  # 1.子类可以直接使用父类的方法
print(d1.name)  # 2.子类可以直接使用父类的属性
d1.bark()

s1 = Student('student1', 14)
s1.sleep()
s1.study()
